/**
 * DEPENDENCIAS:
 * modulo meusGerenciamentoDeErros
 * 
 * FUNCIONALIDADE:
 * funcoes que tratam o carregamento de comboboxes 
 */

/*
 funcao que recebe dados json e retorna array de objetos
 {descricao: dado, valor: id}
 */
function getForCombo(data,fieldDescricao){
	var retorno = [];
	for(var i =0; i<data.length; i++){
		var objeto = {};
		objeto.valor = data[i].id;
		objeto.dado = data[i];
		eval("objeto.descricao = data[i]."+fieldDescricao);
		retorno.push(objeto);
	}
	return retorno;
}

/*
 idem a funcao anterior porem com dois campos de descricao
 */
function getForCombo2(data,fieldDescricao1,fieldDescricao2){ 
	var retorno = [];
	for(var i =0; i<data.length; i++){
		var objeto = {};
		objeto.valor = data[i].id;
		objeto.dado = data[i];
		eval("objeto.descricao = data[i]."+fieldDescricao1+ " + ' - ' + data[i]." + fieldDescricao2);
		retorno.push(objeto);
	}
	return retorno;
}

/*
 controi as options e carrega dentro de um select 
 */
function loadToComboBox(idCombo, data, fieldDescricao){
			var dadosCombo =getForCombo(data,fieldDescricao);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
}

/*
controi as options com dois campos de descricao e carrega dentro de um select 
*/
function loadToComboBox2(idCombo, data, fieldDescricao1, fieldDescricao2){
			var dadosCombo =getForCombo2(data,fieldDescricao1, fieldDescricao2);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>" +
						 "<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
}

/*
 carrega dados de uma url de listagem para um combobox 
 */
function loadToComboBoxUrl(idCombo, url, fieldDescricao){
	jQuery.ajax({
		"type": "GET",
		"url": url,
		"contentType": "application/json; charset=utf-8",
		"dataType": "json",
	  	error: trataErro,
	  	beforeSend:function(){
	  		$(idCombo).parent().block({  message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Buscando...",
									css: { 'border': '0px',
										'background': 'transparent',
										'color': 'white'
									} 
	  						});
	  	},
		success: function(data){
			var dadosCombo =getForCombo(data,fieldDescricao);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>" +
						 "<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
		},
		complete: function(){
			$(idCombo).parent().unblock();
		}
	});
}

/*
carrega dados de uma url de listagem para um combobox com duas propriedades
*/
function loadToComboBoxUrl2(idCombo, url, fieldDescricao1, fieldDescricao2){
	jQuery.ajax({
		"type": "GET",
		"url": url,
		"contentType": "application/json; charset=utf-8",
		"dataType": "json",
		error: trataErro,
		beforeSend:function(){
			$(idCombo).parent().block({  message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Buscando...",
				css: { 'border': '0px',
					'background': 'transparent',
					'color': 'white'
				} 
			});
		},
		success: function(data){
			var dadosCombo =getForCombo2(data,fieldDescricao1,fieldDescricao2);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>" +
			"<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
		},
		complete: function(){
			$(idCombo).parent().unblock();
		}
	});
}

/*
carrega dados de uma url de listagem para um combobox e depois executa funcao de callback
util para formularios de atualizacao 
*/
function loadToComboBoxCallBack(idCombo, url, fieldDescricao,callback){
	jQuery.ajax({
		"type": "GET",
		"url": url,
		"contentType": "application/json; charset=utf-8",
		"dataType": "json",
	  	error: trataErro,
	  	beforeSend:function(){
	  		$(idCombo).parent().block({  message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Buscando...",
									css: { 'border': '0px',
										'background': 'transparent',
										'color': 'white'
									} 
	  						});
	  	},
		success: function(data){
			var dadosCombo =getForCombo(data,fieldDescricao);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>" +
						 "<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
		},
		complete: function(){
			$(idCombo).parent().unblock();
			callback();
		}
	});
}


/*
carrega dados de uma url de listagem para um combobox com dois campos de descricao e depois executa funcao de callback
util para formularios de atualizacao 
*/
function loadToComboBoxCallBack2(idCombo, url, fieldDescricao1,fieldDescricao2,callback){
	jQuery.ajax({
		"type": "GET",
		"url": url,
		"contentType": "application/json; charset=utf-8",
		"dataType": "json",
	  	error: trataErro,
	  	beforeSend:function(){
	  		$(idCombo).parent().block({  message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Buscando...",
									css: { 'border': '0px',
										'background': 'transparent',
										'color': 'white'
									} 
	  						});
	  	},
		success: function(data){
			var dadosCombo =getForCombo2(data,fieldDescricao1,fieldDescricao2);
			var options ="<option selected='true' value =''>Selecione uma opção...</option>" +
						 "<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			$(idCombo).html(options);
			$(idCombo)[0].dataSource = data;
		},
		complete: function(){
			$(idCombo).parent().unblock();
			callback();
		}
	});
}


/*
 carrega dados de uma url de listagem para varios comboboxes
 de mesma class
 */
function loadToComboBoxClass(classCombo, url, fieldDescricao,callback){
	jQuery.ajax({
		"type": "GET",
		"url": url,
		"contentType": "application/json; charset=utf-8",
		"dataType": "json",
	  	error: trataErro,
	  	beforeSend:function(){
	  		$(classCombo).parent().block({  message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Buscando...",
									css: { 'border': '0px',
										'background': 'transparent',
										'color': 'white'
									} 
	  						});
	  	},
		success: function(data){
			var dadosCombo =getForCombo(data,fieldDescricao);
			var options ="<option value =''>Selecione uma opção...</option>" +
						 "<option value=''>----------------------</option>";
			for(var i = 0; i<dadosCombo.length; i++){
				options+="<option value="+dadosCombo[i].valor+">"+dadosCombo[i].descricao+"</option>";
			}
			var combos = $(classCombo);
			for(var i = 0; i<combos.length; i++){
				$(combos[i]).html(options);
				$(combos[i])[0].dataSource = data;
			}
			callback();
		},
		complete: function(){
			$(classCombo).parent().unblock();
		}
	});
}

/*
 carrega dados em um combobox a partir do valor selecionado em outra combobox
 como no caso de Estado e municipios
 */
function loadToSubcombo(event,comboTarget,caminho, legenda){
	var combo = event.target;
	loadToComboBoxUrl(comboTarget,caminho+combo.value,legenda);
}

